В случае если необходимо установить драйвер к USB накопителю или выполнить программный ремонт, вам не обойтись без получения двух идентификаторов устройства:
В появившемся окне свойств, перейдите на вкладку «Сведения» и выберете из выпадающего списка строку «Код экземпляра устройства» в Windows XP или «ИД оборудования» в Windows Vista/7/8.
В поле «Значение», вам будет отображен VID и PID USB устройства, но важно учесть, что некоторые производители, экономя на регистрации собственных VID и PID, могут указать их произвольно!
Рассмотрим программное получение этих значений с использованием Windows Management Instrumentation (WMI) и класса «Win32_USBHub».
Посмотрите внимательно на представленный скриншот программы «WmiExplorer», вы увидите в колонке «Name» название устройства. Как и в диспетчере устройств, usb накопители представлены в виде «Запоминающее устройство для USB». Именно по этому значению будет сделан фильтр. Извлечение данных осуществляется через класс «ManagementObjectSearcher», путем указания запроса «Select», так как нам необходимо организовать фильтр «where», в запросе укажем условие поиска, вывести только устройства с именем «Запоминающее устройство для USB».
Сделайте двойной клик левой клавишей мыши по компоненту «button1» и перейдите в автоматически созданный метод «button1_Click». Добавьте в него, приведенный ниже листинг.
- VID – это Vendor Identifier (идентификатор производителя);
- PID – это Product Identifier (идентификатор продукта, то есть конкретной модели устройства).
В появившемся окне свойств, перейдите на вкладку «Сведения» и выберете из выпадающего списка строку «Код экземпляра устройства» в Windows XP или «ИД оборудования» в Windows Vista/7/8.
В поле «Значение», вам будет отображен VID и PID USB устройства, но важно учесть, что некоторые производители, экономя на регистрации собственных VID и PID, могут указать их произвольно!
Рассмотрим программное получение этих значений с использованием Windows Management Instrumentation (WMI) и класса «Win32_USBHub».
Дополнительную информацию по данному классу вы можете получить по адресу http://msdn.microsoft.com/en-us/library/aa394506(v=vs.85).aspx.
Если воспользоваться программой «WmiExplorer» и открыть класс «Win32_USBHub», то можно увидеть в столбце «PNPDeviceID» строку вида USB\VID_152D&PID_2509\00A123457D9C, которая имеет формат USB\VID_XXXX&PID_XXXX\Serial_number. Именно из этой строки мы и будем извлекать данные. Но данный класс возвращает список всех USB устройств подключенных к компьютеру, поэтому необходимо их отфильтровать.Посмотрите внимательно на представленный скриншот программы «WmiExplorer», вы увидите в колонке «Name» название устройства. Как и в диспетчере устройств, usb накопители представлены в виде «Запоминающее устройство для USB». Именно по этому значению будет сделан фильтр. Извлечение данных осуществляется через класс «ManagementObjectSearcher», путем указания запроса «Select», так как нам необходимо организовать фильтр «where», в запросе укажем условие поиска, вывести только устройства с именем «Запоминающее устройство для USB».
Дополнительную информацию по классу «ManagementObjectSearcher», вы можете получить по адресу http://msdn.microsoft.com/ru-ru/library/system.management.managementobjectsearcher(v=vs.110).aspx.
Функционал данного примера:- Получение VID usb накопителя;
- Получение PID usb накопителя;
- Получение серийного номера usb накопителя.
- ListBox – вывод информации по usb устройствам;
- Button – запуск процесса получения информации.
Сделайте двойной клик левой клавишей мыши по компоненту «button1» и перейдите в автоматически созданный метод «button1_Click». Добавьте в него, приведенный ниже листинг.
string PNPDeviceID = string.Empty; //Предварительно очищаем список listBox1.Items.Clear(); //Получение списка USB накопителей foreach (System.Management.ManagementObject drive in new System.Management.ManagementObjectSearcher( "select * from Win32_USBHub where Caption='Запоминающее устройство для USB'").Get()) { PNPDeviceID = drive["PNPDeviceID"].ToString().Trim(); //Получение Ven устройства listBox1.Items.Add("VID= " + parseVidFromDeviceID(drive["PNPDeviceID"].ToString().Trim()).Trim()); //Получение Prod устройства listBox1.Items.Add("PID= " + parsePidFromDeviceID(drive["PNPDeviceID"].ToString().Trim()).Trim()); //Получение Серийного номера устройства string[] splitDeviceId = drive["PNPDeviceID"].ToString().Trim().Split('\\'); listBox1.Items.Add("Серийный номер= " + splitDeviceId[2].Trim()); //Разделение списка устройств пустой строкой listBox1.Items.Add(""); }Так же добавьте два метода расшифровки значений «PNPDeviceID».
private string parseVidFromDeviceID(string deviceId) { string[] splitDeviceId = deviceId.Split('\\'); string Prod; //Разбиваем строку на несколько частей. //Каждая часть отделяется по символу & string[] splitProd = splitDeviceId[1].Split('&'); Prod = splitProd[0].Replace("VID", ""); ; Prod = Prod.Replace("_", " "); return Prod; } private string parsePidFromDeviceID(string deviceId) { string[] splitDeviceId = deviceId.Split('\\'); string Prod; //Разбиваем строку на несколько частей. //Каждая часть отделяется по символу & string[] splitProd = splitDeviceId[1].Split('&'); Prod = splitProd[1].Replace("PID_", ""); ; Prod = Prod.Replace("_", " "); return Prod; }Запустите ваш проект, нажав на клавиатуре, клавишу «F5». Вставьте Usb накопитель и нажмите кнопку «Получить информацию». Вы получите информацию о данном накопителе. Если устройств подключено несколько, то информация об устройствах будет разделена пустой строкой.
Внимание! Для карт памяти MMC, SD, MicroSD и прочих VID и PID определить нельзя, у них нет этих значений. Если даже попытаться их прочесть с помощью утилит, то виден будет VID и PID карт-ридера.
Ссылка для скачивания примера: Яндекс.Диск
Комментариев нет:
Отправить комментарий
Большая просьба, не писать в комментариях всякую ерунду не по теме!